﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Clinica
{
    public partial class GUIBuscarLineapedidoServicio : Form
    {
		List <BETipoServicio> listaTipoServicio;
		List <BEEstadoAtencion>  listaEstadoAtencion;
		
		public int colCheck;
    	
    	private BECliente clienteSel;
		
		public BECliente ClienteSel {
			get { return clienteSel; }
			set { clienteSel = value; }
		}
		
		private BEMascota mascotaSel;
		
		public BEMascota MascotaSel {
			get { return mascotaSel; }
			set { mascotaSel = value; }
		}
		
		private BEEmpleado empleadoSel;
		
		public BEEmpleado EmpleadoSel {
			get { return empleadoSel; }
			set { empleadoSel = value; }
		}
		
        private List<BELineaPedidoServicio> gridCitas;
        
		public List<BELineaPedidoServicio> GridCitas {
			get { return gridCitas; }
			set { gridCitas = value; }
		}

        public GUIBuscarLineapedidoServicio()
        {
            this.gridCitas = new List<BELineaPedidoServicio>();
            this.colCheck = 0;
            InitializeComponent();
            inicializarCombos();
           
            
        }
        
        public void inicializarCombos(){
        	this.clienteSel = new BECliente();
            this.mascotaSel = new BEMascota();
            this.empleadoSel = new BEEmpleado();
            this.clienteTB.Enabled = false;
            this.buscarMascotaBTN.Enabled = false;
            this.mascotaTB.Enabled = false;
            
            this.listaTipoServicio =  (new BLTipoServicio()).obtenerTipoServicio();
            this.listaEstadoAtencion = (new BLEstadoAtencion().obtenerEstadoAtencion());
            
                 	        
        	if ( this.listaTipoServicio.Count != 0) {
        		this.tipoServicioCB.DataSource = this.listaTipoServicio;
        		this.tipoServicioCB.ValueMember = "id";
    			this.tipoServicioCB.DisplayMember = "nombre";        	
        	} else {
        		MessageBox.Show("No se han cargado datos en Tipo Servicio","Error");
        	}
            
            if ( this.listaEstadoAtencion.Count != 0) {
        		this.estadoCB.DataSource = this.listaEstadoAtencion;
        		this.estadoCB.ValueMember = "idEstado";
    			this.estadoCB.DisplayMember = "descripcion";        	
        	} else {
        		MessageBox.Show("No se han cargado datos en Estado Servicio","Error");
        	}
        }

        private void llenarGrid()
        {
        	 try{
        		this.grid.Rows.Clear();
        		List<String> datos = new List<String>();
				
        		if (clienteTB.Text == null)
        			datos.Add("");
        		else
        			datos.Add(clienteTB.Text);
				
        		
        		if (mascotaTB.Text == null)
        			datos.Add("");
        		else
        			datos.Add(mascotaTB.Text);
				
				if(Convert.ToInt16(tipoServicioCB.SelectedValue) == -1){
					datos.Add("");
				}
				else{
					datos.Add(tipoServicioCB.Text);
				}
            
				if (empleadoTB.Text == null) 
					datos.Add("");
				else
					datos.Add(empleadoTB.Text);
				
				if(Convert.ToInt16(estadoCB.SelectedValue) == -1){
					datos.Add("");
				}
				else{
					datos.Add(estadoCB.Text);
				}
				
				
				BLLineaPedidoServicio pedServ = new BLLineaPedidoServicio();
				
				List<List<string>> result = pedServ.getServicios(datos);
				
				
				for (int j=0; j<result.Count; j++)
					{
						string[] fila = null;
						fila = new string[]{
									false.ToString(),
									result[j][0],
									result[j][1],
									result[j][2],
									result[j][3],
									result[j][4],
						            result[j][5],
						            result[j][6],
						            result[j][7]
						            };
						this.grid.Rows.Add(fila);
					}
            }
            catch {
            	MessageBox.Show("No se encontraron resultados para sus criterios de busqueda","Aviso");
            }
            
            
        }

        private void mascotaLB_Click(object sender, EventArgs e)
        {

        }

        private void tipoDeCitaLB_Click(object sender, EventArgs e)
        {

        }
        
        private void GUIBuscarCitaMedica_Load(object sender, EventArgs e)
        {
            
        }

        private void aceptarBTN_Click(object sender, EventArgs e)
        {
            llenarGrid();
        }

        private void crearBTN_Click(object sender, EventArgs e)
        {
           this.clienteTB.Text = "";
           this.mascotaTB.Text = "";
           this.tipoServicioCB.SelectedValue = -1;
           this.empleadoTB.Text = "";
           this.estadoCB.SelectedValue = -1;
           this.grid.Rows.Clear();
        }

        private void grid_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
			//BELineaPedidoServicio
        }

        private void editarBTN_Click(object sender, EventArgs e)
        {
          	try {
			
				
				int cont = 0;
				int aux = 0;
				int pos = 0;
				foreach (DataGridViewRow fila in grid.Rows)
				{
					if (fila.Cells[this.colCheck].Value != null && Convert.ToBoolean(fila.Cells[this.colCheck].Value))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				
				if (cont == 0)
				{
					Utils.MessageAviso("Seleccione una atencion");	
				}
				else if (cont == 1)
				{								
					DataGridViewRow fila = grid.Rows[pos];
					if (fila.Cells[this.colCheck].Value != null && Convert.ToBoolean(fila.Cells[this.colCheck].Value))
					{
						BELineaPedidoServicio linea = new BELineaPedidoServicio();
						BLLineaPedidoServicio bl = new BLLineaPedidoServicio();
						
						linea = bl.getLineaPedidoServicio(int.Parse(fila.Cells[1].Value.ToString()),int.Parse(fila.Cells[2].Value.ToString()));
						
						Ventas.GUIEditarLineaPedidoVentaServicio editar = new Ventas.GUIEditarLineaPedidoVentaServicio(linea);
						//Clinica.GUIEditarLineaPedidoVentaServicio editar = new Clinica.GUIEditarLineaPedidoVentaServicio(linea);
						
						editar.ShowDialog(this);
						this.grid.Rows.Clear();
						llenarGrid();
						
					}
					
					cont++;
				}
				else if (cont > 1)
				{
					Utils.MessageAviso("Seleccione sólo una atencion");		
				}	
			} catch {
				Utils.MessageAviso("Ha ocurrido un inconveniente al momento de editar la atencion.");
			}
			
        }



        private void eliminarBTN_Click(object sender, EventArgs e)
        {
           try {
			
				List<List<int>> servElim = new List<List<int>>();
				int i = 0;
				foreach(DataGridViewRow fila in this.grid.Rows)
				{
					if((fila.Cells[this.colCheck].Value != null) && (Convert.ToBoolean(fila.Cells[this.colCheck].Value) == true) &&
					   fila.Cells[7].Value.ToString()=="REGISTRADO")
					{
						List<int> aux = new List<int>();
						aux.Add(int.Parse(fila.Cells[1].Value.ToString()));
						aux.Add(int.Parse(fila.Cells[2].Value.ToString()));
						servElim.Add(aux);
						i++;
					}
					
					else if ((fila.Cells[this.colCheck].Value != null) && (Convert.ToBoolean(fila.Cells[this.colCheck].Value) == true) &&
					   fila.Cells[7].Value.ToString()!="REGISTRADO"){
						Utils.MessageAviso("Solo seleccione atenciones con estado REGISTRADO");
						fila.Cells[this.colCheck].Value = false;
					}
				}
				
				if (servElim.Count == 0)
				{
					Utils.MessageAviso("Seleccione una atencion.");	
				}
				else 
				{								
					if (Utils.MessagePregunta("¿Está seguro que desea eliminar la(las) atencion(es) seleccionada(s)?"))
					{
						BLLineaPedidoServicio bl = new BLLineaPedidoServicio();
						for (int k=0; k < servElim.Count; k++){
							//MessageBox.Show("rol elim: "+rolesElim[i].ToString(),"Aviso");
							
							int j = bl.anularAtencion(servElim[k][0], servElim[k][1]);
							
							if (j==0){
								Utils.MessageAviso("No se pudo eliminar la atencion seleccionada");
							}
							else{
								Utils.MessageAviso("La atencion seleccionada se elimino exitosamente");
							}
						}	
						llenarGrid();
												
					}
				}
				
			} catch {
				Utils.MessageAviso("Usted no ha seleccionado ninguna atencion");
			}
			
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RRHH.GUIBuscarEmpleado v = new RRHH.GUIBuscarEmpleado();
            v.ShowDialog(this);
            try {
            	this.empleadoSel = v.Empleado;
            	this.empleadoTB.Text = this.empleadoSel.Nombre + " " +
            						 this.empleadoSel.ApPaterno + " " +
            						 this.empleadoSel.ApMaterno;
            }
            
            catch {
            	this.empleadoTB.Text = "";
            }
        }
        
        void gridCellMouseDoubleClick (object sender, DataGridViewCellMouseEventArgs e)
        {
        	try{        	
	        	//MessageBox.Show(listaClientes[e.RowIndex].Nombre);
	        	if(Convert.ToBoolean(grid.Rows[e.RowIndex].Cells[0].Value))
	        		grid.Rows[e.RowIndex].Cells[0].Value = false;
	        	else
	        		grid.Rows[e.RowIndex].Cells[0].Value = true;
	        	//this.Dispose();
        	}catch{
        		
        	}
        } 
        
        

        private void buscarMascotaBTN_Click(object sender, EventArgs e)
        {
            Ventas.GUICliente v = new Ventas.GUICliente(this.clienteSel,3);
            v.ShowDialog(this);
            
            try{
            	this.mascotaSel = v.MascotaSeleccionada;
            	this.mascotaTB.Text = this.mascotaSel.Nombre;
            }
            catch {
            	this.mascotaTB.Text = "";
            }
            
            
            
            
        }

        private void buscarClienteBTN_Click(object sender, EventArgs e)
        {
            Ventas.GUIMantenimientoCliente v = new Ventas.GUIMantenimientoCliente(true);
            v.ShowDialog(this);
            
            try{
            	
            	this.clienteSel = v.ClienteSeleccionado;
            	
               	this.clienteTB.Text = this.clienteSel.Nombre + " " +
               						  this.clienteSel.ApellidoPaterno + " " +
               						  this.clienteSel.ApellidoMaterno;
               	
               	this.buscarMascotaBTN.Enabled = true;
            }
            catch {
            	this.clienteTB.Text = "";
            }
        }
        
        
        
        
        
        void FiltrosDeBusquedaGBEnter(object sender, EventArgs e)
        {
        	
        }
    }
}
